package com.cian.controller;


import com.cian.entity.History;
import com.cian.entity.dto.AccountHistoryDTO;
//import com.cian.service.impl.HistoryServiceImpl;
import com.cian.entity.dto.GoodsHistoryDTO;
import com.cian.service.impl.HistoryServiceImpl;
import com.cian.service.impl.RedisImpl;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Calendar;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

/**
 * <p>
 * 销售记录的历史表项 前端控制器
 * </p>
 *
 * @author Cian
 * @since 2021-03-15
 */
@RestController
    @RequestMapping("//history")
public class HistoryController {
    @Autowired
    HistoryServiceImpl historyService;
    @Autowired
    RedisImpl redis;

    @RequestMapping("/obtain/history/price")
    public List<GoodsHistoryDTO> getGoodsPriceHistory(@RequestParam("account") String account,
                                                      @RequestParam("server-code") String serverCode){
        // 返回七天内，特定终端对应的商品价格记录
        // TODO 暂时没有进行对Redis的数据缓存，当前采用直接访问mysql获取到数据
        // 记录时间，使用 Calendar 推算时间
        Calendar calendar = Calendar.getInstance();
        // 使用 Calendar类 从七天前开始推算
        calendar.add(Calendar.DAY_OF_WEEK, -6);
        Calendar rightCalendar = Calendar.getInstance();
        List<GoodsHistoryDTO> list = historyService.obtainPriceHistoryForLine(account, serverCode,
                calendar.getTime(), rightCalendar.getTime());
        return list;
    }

    @RequestMapping("/obtain/history/stock")
    public List<GoodsHistoryDTO> getGoodsStockHistory(@RequestParam("account") String account,
                                                      @RequestParam("server-code") String serverCode){
        // 返回七天内，特定终端对应的商品价格记录
        // TODO 暂时没有进行对Redis的数据缓存，当前采用直接访问mysql获取到数据
        // 记录时间，使用 Calendar 推算时间
        Calendar calendar = Calendar.getInstance();
        // 使用 Calendar类 从七天前开始推算
        calendar.add(Calendar.DAY_OF_WEEK, -6);
        Calendar rightCalendar = Calendar.getInstance();
        List<GoodsHistoryDTO> list = historyService.obtainGoodsHistoryForLine(account, serverCode,
                calendar.getTime(), rightCalendar.getTime());
        return list;
    }

    @RequestMapping("/obtain/history/line")
    public List<AccountHistoryDTO> getHistoryForLineCharts(@RequestParam("account") String account,
                                                 @RequestParam("server-code") String serverCode){
        // 返回七天内，特定终端对应的历史记录
        // TODO 暂时没有进行对Redis的数据缓存，当前采用直接访问mysql获取到数据
        List<AccountHistoryDTO> list = new LinkedList<>();
        // 记录时间，使用 Calendar 推算时间
        Calendar calendar = Calendar.getInstance();
        // 使用 Calendar类 从七天前开始推算
        calendar.add(Calendar.DAY_OF_WEEK, -6);
        for(int index = 0; index < 7; index++){
            list.add(historyService.obtainServerHistoryForLine(account, calendar.getTime(), serverCode));
            calendar.add(Calendar.DAY_OF_WEEK, 1);
        }
        return list;
    }

    @RequestMapping("/obtain/account")
    @ApiModelProperty(value = "获取账户总共的历史购买记录，默认为最近七日的历史")
    public List<AccountHistoryDTO> getAccountHistory(@RequestParam("account") String account){
        List<AccountHistoryDTO> list = new LinkedList<>();
        // 记录时间，使用 Calendar 推算时间
        Calendar calendar = Calendar.getInstance();
        // 使用 Calendar类 从七天前开始推算
        calendar.add(Calendar.DAY_OF_WEEK, -6);
        for(int index = 0; index < 7; index++){
            list.add( historyService.obtainAccountHistory(account, calendar.getTime()));
            calendar.add(Calendar.DAY_OF_WEEK, 1);
        }
        return list;
    }
}

